# Linux Kernel Makefile

# 内核源码目录(FIXME: 通过修改为已编译内核目录以增强正确性，默认使用系统当前内核源码目录)
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)

include kernel-module.mk


# 搜索所有存在 Makefile 文件的目录, 并将目录名作为模块名，忽略 . 目录
FIND_MODULES=$(shell find -maxdepth 2 -name Makefile  | xargs -n1 dirname | xargs -n1 basename | grep -v '^\.')


# 初始化默认目标
all: $(foreach module,$(FIND_MODULES),$(module))
	@echo "make done"

clean: $(foreach module,$(FIND_MODULES),clean-$(module))
	@echo "clean done"

list-modules:
	@echo $(FIND_MODULES)


# 生成编译命令(FIXME: 基于已编译过的内核源码目录, 可建立完整的编译命令数据库)
KERNEL_COMPILED_SOURCE_DIR=$(KDIR)

# compile_commands.json 输出位置
COMPILE_COMMANDS_OUTPUT=$(shell pwd)/compile_commands.json

ifneq ($(KERNEL_COMPILED_SOURCE_DIR),)
gen_compile_commands:
	@$(KERNEL_COMPILED_SOURCE_DIR)/scripts/clang-tools/gen_compile_commands.py -o $(COMPILE_COMMANDS_OUTPUT) -d $(KERNEL_COMPILED_SOURCE_DIR)
	@echo "compile-commands done"
endif



# 遍历所有模块, 生成对应的目标
USE_MODULE_CLEAN=y
USE_MODULE_TEST_COMMAND=n

$(foreach module,$(FIND_MODULES),$(eval $(call linux-module,$(module))))


